home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
mac
/
LOGIC Apple II 5.25" Library - ProDOS
/
PRO018.dsk
/
LOGIC.GATES.bas
< prev
next >
Wrap
BASIC Source File
|
2012-02-16
|
6KB
|
171 lines
100 REM SIMPLE DIGITAL LOGIC
110 REM BRIEF TUTORIAL & QUIZ
120 REM
130 REM BY KEITH FALKNER
140 REM TORONTO CANADA
150 REM
160 REM GIVE AWAY COPIES.
170 REM
180 DATA 10: REM # OF CIRCUITS
190 DATA 5: REM # VARIETIES
200 REM
210 REM FOR EACH CIRCUIT,
220 REM THE DATA SHOWS:
230 REM ITS NAME
240 REM # OF INPUTS
250 REM # OF OUTPUTS
260 REM TYPE OF CIRCUIT
270 REM IS IT ON?
280 REM # ACTIVE INPUTS
290 REM # NEEDED TO TURN ON
300 REM ON IF 0 ACTIVE IN?
310 REM ON IF 1 ACTIVE IN?
320 REM ON IF 2 ACTIVE IN?
330 REM
340 DATA OR GATE,2,1,1,0,0,1 OR 2,N,Y,Y
350 DATA OR GATE,2,1,1,1,1 OR 2,0,N,Y,Y
360 DATA AND GATE,2,1,2,0,0 OR 1,2,N,N,Y
370 DATA AND GATE,2,1,2,1,2,0 OR 1,N,N,Y
380 DATA NOR GATE,2,1,3,0,1 OR 2,0,Y,N,N
390 DATA NOR GATE,2,1,3,1,0,1 OR 2,Y,N,N
400 DATA NAND GATE,2,1,4,0,2,0 OR 1,Y,Y,N
410 DATA NAND GATE,2,1,4,1,0 OR 1,2,Y,Y,N
420 DATA INVERTER,1,1,5,0,1,0,Y,N,X
430 DATA INVERTER,1,1,5,1,0,1,Y,N,X
440 DATA 4: REM # MENU ITEMS
450 DATA EXPLAIN ALL THE CIRCUITS
460 DATA EXPLAIN A SELECTED CIRCUIT
470 DATA TEST YOUR DIGITAL LOGIC
480 DATA QUIT
490 TEXT : HOME : NORMAL : SPEED= 255
500 GR : VTAB 21: PRINT " A T U T O R I A L A B O U T"
510 XL = 12:XR = 26:YA = 20: REM LOCATE THE PICTURES
520 READ Z:EN = Z: DIM EN$(Z),EI(Z),EO(Z),ET(Z),EV(Z),EA$(Z),ER$(Z),EY$(2,Z),EQ(Z)
530 READ T: DIM X1(T,16),X2(T,16)
540 FOR I = 1 TO EN: READ EN$(I),EI(I),EO(I),ET(I),EV(I),EA$(I),ER$(I)
550 FOR J = 0 TO 2: READ EY$(J,I): NEXT
560 C = ET(I): FOR Y = 0 TO 16: ON C GOTO 570,590,570,590,610
570 X2(C,Y) = XR -Y ^4 *.0002 +.3
580 X1(C,Y) = XL -Y *Y *.02 +.4: NEXT : GOTO 630
590 X2(C,Y) = XR -Y ^6 *.0000007 +.3
600 X1(C,Y) = XL -2: NEXT : GOTO 630
610 X2(C,Y) = XR -Y
620 X1(C,Y) = XL -2: NEXT
630 VTAB 23: IF EV(I) THEN INVERSE
640 PRINT TAB( 13)EN$(I)" (";
650 IF EV(I) = 0 THEN PRINT "OFF";
660 IF EV(I) = 1 THEN PRINT "ON";
670 PRINT ")" TAB( 39)" ": NORMAL
680 GOSUB 1550
690 NEXT
700 FOR I = 1 TO 2000: NEXT
710 DEF FN Q(Z) = 1 + INT(Z * RND(1))
720 READ MN: DIM MA$(MN),MC(MN)
730 FOR I = 1 TO MN: READ MA$(I): NEXT
740 REM M A I N M E N U
750 TEXT : HOME : INVERSE : PRINT " D I G I T A L L O G I C ": NORMAL
760 VTAB 24: PRINT " ('ESC' KEY RETURNS TO THIS MENU.)";: VTAB 3: PRINT
770 PRINT : PRINT : FOR I = 1 TO MN
780 PRINT : PRINT TAB( 4)I" "MA$(I): PRINT : NEXT
790 PRINT : PRINT : PRINT TAB( 8)"SELECT 1 - "MN".";: HTAB 4
800 GET Z$:MA = VAL(Z$)
810 IF MA <1 OR MA >MN GOTO 800
820 PRINT MA
830 ON MA GOTO 900,940,1060,1380
840 REM CURSOR @ LOWER RIGHT
850 VTAB 24: HTAB 40
860 REM GET A KEY
870 GET Z$:E = (Z$ = CHR$(27))
880 RETURN
890 REM EXPLAIN ALL THE CIRCUITS
900 FOR I = 1 TO EN: GOSUB 1400
910 GOSUB 850: PRINT : HOME : IF E THEN I = EN
920 NEXT : GOTO 750
930 REM EXPLAIN ONE CIRCUIT
940 TEXT : HOME : PRINT " SELECT ANY CIRCUIT:": PRINT : PRINT "(OR PRESS 'ESC' FOR MENU.)": PRINT : PRINT : PRINT
950 FOR I = 1 TO EN: PRINT " ";: INVERSE : PRINT CHR$(64 +I);: NORMAL : PRINT " "EN$(I);
960 IF EV(I) = 0 THEN PRINT " (OFF";
970 IF EV(I) = 1 THEN PRINT " (ON";
980 PRINT " STATE)": NEXT
990 PRINT : PRINT : PRINT " SELECT A-" CHR$(63 +I)".";: HTAB 4
1000 GOSUB 870: IF E THEN PRINT : GOTO 750
1010 I = ASC(Z$) -64: IF I <1 OR I >EN GOTO 1000
1020 PRINT Z$: GOSUB 1400: GOSUB 850: PRINT
1030 IF E GOTO 750
1040 GOTO 940
1050 REM QUIZ
1060 FOR I = 1 TO EN:EQ(I) = 0: NEXT :EQ = 0
1070 I = FN Q(EN): IF EQ(I) GOTO 1070
1080 EQ = EQ +1:EQ(I) = 1
1090 GOSUB 1560: HOME : PRINT "THIS IS A";
1100 Q1$ = MID$ (EN$(I),1,1)
1110 Q2$ = MID$ (EN$(I),2,1)
1120 IF Q1$ = "A" OR Q1$ = "E" OR Q1$ = "I" OR Q1$ = "O" OR Q1$ = "U" THEN PRINT "N";
1130 PRINT " ";
1140 GOSUB 870: IF E GOTO 750
1150 IF Z$ < >Q1$ GOTO 1140
1160 PRINT Z$;
1170 GOSUB 870: IF E GOTO 750
1180 IF Z$ < >Q2$ GOTO 1170
1190 PRINT MID$ (EN$(I),2)". IS IT ON? ";
1200 :Q$ = MID$ ("NY",1 +EV(I),1)
1210 GOSUB 870: IF E GOTO 750
1220 IF Z$ < >Q$ GOTO 1210
1230 PRINT Z$".";
1240 FOR J = 0 TO 2:Q$ = EY$(J,I): IF Q$ = "X" GOTO 1330
1250 PRINT : PRINT "IS IT ON WHEN "J" INPUT";
1260 IF J < >1 THEN PRINT "S ARE";
1270 IF J = 1 THEN PRINT " IS";
1280 PRINT " ACTIVE? ";: CALL -958
1290 GOSUB 870: IF E GOTO 750
1300 IF Z$ < >Q$ GOTO 1290
1310 PRINT Z$"!";
1320 FOR Z = 1 TO 400: NEXT
1330 NEXT
1340 GOSUB 850: IF E GOTO 750
1350 IF EQ = EN GOTO 750
1360 GOTO 1070
1370 REM QUIT
1380 TEXT : HOME : PRINT CHR$(4)"-STARTUP"
1390 REM EXPLAIN CIRCUIT # I
1400 GOSUB 1560: HOME : PRINT "THIS IS A";:T$ = LEFT$(EN$(I),1)
1410 IF T$ = "A" OR T$ = "E" OR T$ = "I" OR T$ = "O" OR T$ = "U" THEN PRINT "N";
1420 PRINT " "EN$(I)". IT IS ";
1430 IF EV(I) = 1 THEN Z$ = "ON":ZZ$ = "OFF"
1440 IF EV(I) = 0 THEN Z$ = "OFF":ZZ$ = "ON"
1450 PRINT Z$"."
1460 PRINT "THE DEVICE HAS ";
1470 PRINT EA$(I)" INPUT";
1480 IF EA$(I) < >"1" THEN PRINT "S";
1490 PRINT " ENERGIZED."
1500 PRINT "TURN IT "ZZ$" WITH ";
1510 PRINT ER$(I)" INPUT";
1520 IF ER$(I) < >"1" THEN PRINT "S";
1530 PRINT ".";
1540 RETURN
1550 REM DRAW CIRCUIT # I
1560 GR :Z = EV(I): COLOR= 4 +11 *Z
1570 REM BLUE=OFF WHITE=ON
1580 C = ET(I): REM TYPE
1590 FOR Y = 0 TO 16
1600 X1 = X1(C,Y):X2 = X2(C,Y)
1610 HLIN X1,X2 AT YA -Y
1620 HLIN X1,X2 AT YA +Y
1630 NEXT
1640 Y = YA: IF C < >5 THEN Y = YA -6
1650 VLIN Y -1,Y +1 AT XL -12
1660 VLIN Y -1,Y +1 AT XL -8
1670 HLIN XL -11,XL -9 AT Y -2
1680 HLIN XL -11,XL -9 AT Y +2
1690 HLIN XL -8,XL AT Y
1700 IF YA >Y THEN Y = YA +YA -Y: GOTO 1650
1710 IF C <3 THEN HLIN XR,XR +10 AT YA: GOTO 1770
1720 VLIN YA -1,YA +1 AT XR +1
1730 VLIN YA -1,YA +1 AT XR +5
1740 HLIN XR +2,XR +4 AT YA -2
1750 HLIN XR +2,XR +4 AT YA +2
1760 HLIN XR +5,XR +10 AT YA
1770 PLOT XR +10,YA -2: PLOT XR +10,YA +2
1780 VLIN YA -1,YA +1 AT XR +11
1790 PLOT XR +12,YA
1800 RETURN